﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using YasharEl.Infrastructure.Core.Commenting;

namespace YasharEl.Infrastructure.TaskEngine.Commenting
{
    [Serializable]
    public class TaskCommentType : CommentType
    {
        #region TypeSafe Static Enumarations

        public static readonly TaskCommentType GeneralTaskComment = new GeneralTaskCommentType();
        public static readonly TaskCommentType ConsultTaskComment = new ConsultTaskCommentType();
        public static readonly TaskCommentType ApproveTaskComment = new ApproveTaskCommentType();
        public static readonly TaskCommentType DeclineTaskComment = new DeclineTaskCommentType();
        public static readonly TaskCommentType CancelConsultTaskComment = new CancelConsultTaskCommentType();
        public static readonly TaskCommentType RemindTaskComment = new RemindTaskCommentType();
        public static readonly TaskCommentType CancelReminderTaskComment = new CancelReminderTaskCommentType();
        public static readonly TaskCommentType CompleteTaskComment = new CompleteTaskCommentType();
        #endregion

        #region Constructors

        protected TaskCommentType(int value, string shortName, string longName)
            : base(value, shortName, longName)
        {
        }

        protected TaskCommentType()
        {
        }

        #endregion

        #region Inner Classes - Type safe concrete enumarations.

        [Serializable]
        private class GeneralTaskCommentType : TaskCommentType
        {
            public GeneralTaskCommentType()
                : base(1, "General Task Comment", "General Task Comment")
            {

            }
        }

        [Serializable]
        private class ConsultTaskCommentType : TaskCommentType
        {
            public ConsultTaskCommentType()
                : base(2, "Consult Task Comment", "Consult Task Comment")
            {

            }
        }

        [Serializable]
        private class ApproveTaskCommentType : TaskCommentType
        {
            public ApproveTaskCommentType()
                : base(3, "Approve Task Comment", "Approve Task Comment")
            {

            }
        }

        [Serializable]
        private class DeclineTaskCommentType : TaskCommentType
        {
            public DeclineTaskCommentType()
                : base(4, "Decline Task Comment", "Decline Task Comment")
            {

            }
        }

        [Serializable]
        private class CancelConsultTaskCommentType : TaskCommentType
        {
            public CancelConsultTaskCommentType()
                : base(5, "Cancel Consult Task Comment", "Cancel Consult  Task Comment")
            {

            }
        }

        [Serializable]
        private class RemindTaskCommentType : TaskCommentType
        {
            public RemindTaskCommentType()
                : base(6, "Remind Task Comment", "Remind Task Comment")
            {

            }
        }

        [Serializable]
        private class CancelReminderTaskCommentType : TaskCommentType
        {
            public CancelReminderTaskCommentType()
                : base(7, "Cancel Reminder Task Comment", "Cancel Reminder Task Comment")
            {

            }
        }

        [Serializable]
        private class CompleteTaskCommentType : TaskCommentType
        {
            public CompleteTaskCommentType()
                : base(8, "Complete Task Comment", "Complete Task Comment")
            {

            }
        }

        #endregion
    }
}
